package demo.dragdemo;

import java.awt.Image;
import java.awt.Toolkit;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;



/**
 * 工具类
 * 
 * @author 唐植超
 * 
 */
public class ObjectUtil {

	private ObjectUtil() {
	}

	/**
	 * 克隆对象
	 * 
	 * @param obj
	 * @return
	 */
	public static Object cloneObject(Object obj) {
		Object copyObj = null;
		try {
			String fileName = System.nanoTime() + "";
			File f = new File(fileName);
			writeObject(obj, f);
			copyObj = readObject(f);
			System.gc();
			f.delete();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return copyObj;
	}

	/**
	 * 反序列化
	 * 
	 * @param f
	 * @return
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public static Object readObject(File f) throws FileNotFoundException,
			IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		ois = new ObjectInputStream(new BufferedInputStream(
				new FileInputStream(f)));
		Object obj = ois.readObject();
		ois.close();
		return obj;
	}

	/**
	 * 序列化
	 * 
	 * @param obj
	 * @param f
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public static void writeObject(Object obj, File f)
			throws FileNotFoundException, IOException {
		ObjectOutputStream out = null;
		out = new ObjectOutputStream(new BufferedOutputStream(
				new FileOutputStream(f)));
		out.writeObject(obj);
		out.flush();
		out.close();
	}

	/**
	 * 解压缩反序列化
	 * 
	 * @param f
	 * @return
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public static Object readZip(File f) throws FileNotFoundException,
			IOException, ClassNotFoundException {
		ObjectInputStream ois = null;
		GZIPInputStream gis;
		gis = new GZIPInputStream(new BufferedInputStream(
				new FileInputStream(f)));
		ois = new ObjectInputStream(gis);
		Object obj = ois.readObject();
		ois.close();
		return obj;
	}

	/**
	 * 压缩序列化
	 * 
	 * @param obj
	 * @param f
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public static void writeZip(Object obj, File f)
			throws FileNotFoundException, IOException {
		ObjectOutputStream out = null;
		GZIPOutputStream gout = null;
		gout = new GZIPOutputStream(new BufferedOutputStream(
				new FileOutputStream(f)));
		out = new ObjectOutputStream(gout);
		out.writeObject(obj);
		out.flush();
		gout.finish();
		out.close();
	}

	/**
	 * 获取图片
	 * 
	 * @param name
	 * @return
	 */
	public static Image getImage(String name) {
		return Toolkit.getDefaultToolkit().getImage(
				ControlDragManager.class.getResource(name));
	}
}
